from django.db import models


class StockMeta(models.Model):
    name = models.CharField(max_length=255, verbose_name='股票名称')
    code = models.CharField(max_length=128, verbose_name='股票代码')
    description = models.TextField(verbose_name='描述')
    add_date = models.DateTimeField(auto_now_add=True, verbose_name="添加时间")

    def __str__(self):
        return self.name


class StockDaily(models.Model):
    stock = models.ForeignKey(to=StockMeta, on_delete=models.CASCADE, related_name='stock')
    open = models.DecimalField(max_digits=12, decimal_places=3, verbose_name='开盘')
    close = models.DecimalField(max_digits=12, decimal_places=3, verbose_name='收盘')
    high = models.DecimalField(max_digits=12, decimal_places=3, verbose_name='最高')
    low = models.DecimalField(max_digits=12, decimal_places=3, verbose_name='最低')
    volume = models.DecimalField(max_digits=15, decimal_places=3, verbose_name='成交')
    date = models.DateTimeField(verbose_name='交易日期')


class PbcTradeType(models.Model):
    """【央行>货币政策>货币政策工具>公开市场业务>公开市场业务交易】交易类型"""
    name = models.CharField(max_length=255, verbose_name='类型名称', help_text='流动性总量处理合理充裕水平/较高水平，开展逆回购，MLF，TMLF，存款准备金，其它', null=True)
    description = models.TextField(verbose_name='描述', null=True)
    cid = models.IntegerField(verbose_name='颜色id', null=True)

    def __str__(self):
        return self.name


class PbcTradeDaily(models.Model):
    """【央行>货币政策>货币政策工具>公开市场业务>公开市场业务交易】日常交易记录"""
    content = models.TextField(verbose_name='主体内容', null=True)
    type = models.ForeignKey(to=PbcTradeType, on_delete=models.CASCADE, related_name='trade_type')
    amount = models.DecimalField(max_digits=12, decimal_places=2, verbose_name='当前实际金额（亿元）', help_text='用于显示值（当前实际金额 = 前一日金额 + 当天交易量之和 - 过期交易量之和）', null=True)
    volume = models.DecimalField(max_digits=12, decimal_places=2, verbose_name='交易量（亿元）', null=True)
    effective_date = models.DateField(verbose_name='生效日期', help_text='交易周期开始日期', null=True)
    maturity_days = models.IntegerField(verbose_name='期限天数', help_text='交易期限天数，以天统计，1年（365天）', null=True)
    maturity_date = models.DateField(verbose_name='到期日期', help_text='生效日期+期限天数（到期日期为非工作日时，则延后处理）', null=True)
    status = models.BooleanField(verbose_name='交易周期状态', help_text='交易周期完成与否（到期赎回）', default=0)
    rate = models.CharField(max_length=128, verbose_name='利率', null=True)
    update_date = models.DateTimeField(auto_now=True, verbose_name='更新日期')

    def __str__(self):
        return "{}: {}".format(self.type.name, self.amount)

    class Meta:
        ordering = ('-effective_date',)

